/**
 * 计算数组中的最小值和最大值。
 *
 * 该函数的时间复杂度为 `O(n)`，即线性时间，与数组的长度成正比。
 *
 * @param {Array<number>} x 包含一个或多个数据点的样本
 * @returns {Array<number>} 最小值和最大值
 * @throws {Error} 如果数组 x 的长度小于1
 * @example
 * extent([1, 2, 3, 4]);
 * // => [1, 4]
 */
function extent(x) {
    if (x.length === 0) {
        throw new Error("extent 函数至少需要一个数据点");
    }

    let min = x[0];
    let max = x[0];
    for (let i = 1; i < x.length; i++) {
        if (x[i] > max) {
            max = x[i];
        }
        if (x[i] < min) {
            min = x[i];
        }
    }
    return [min, max];
}

export default extent;
